//
//  487. 最大连续1的个数 II.swift
//  手撕代码
//
//  Created by xiaoZuDeMeng on 2024/2/6.
//

import Foundation

//https://leetcode.cn/problems/max-consecutive-ones-ii/
//给定一个二进制数组 nums ，如果最多可以翻转一个 0 ，则返回数组中连续 1 的最大个数。
//
//
//
//示例 1：
//
//输入：nums = [1,0,1,1,0]
//输出：4
//解释：翻转第一个 0 可以得到最长的连续 1。
//     当翻转以后，最大连续 1 的个数为 4。
//示例 2:
//
//输入：nums = [1,0,1,1,0,1]
//输出：4
//
//
//提示:
//
//1 <= nums.length <= 105
//nums[i] 不是 0 就是 1.

func 最大连续1的个数II(_ nums: [Int]) -> Int {
    var left = 0
    var ans = 0
    var zeros = 0
    for index in 0..<nums.count {
        if nums[index] == 0 {
            zeros += 1
        }
        while zeros > 1 {
            if nums[left] == 0 {
                zeros -= 1
            }
            left += 1
        }
        ans = max(ans, index - left + 1)
    }
    return ans
}
